package com.training.web.service;

import com.training.web.repository.WebAppVersionRepository;
import com.training.bean.AppVersion;
import com.training.utils.FileUploadUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Optional;

@Service("webAppVersionService")
public class WebAppVersionService {
    
    @Autowired
    private WebAppVersionRepository webAppVersionRepository;
    
    @Autowired
    private FileUploadUtil fileUploadUtil;
    
    /**
     * 保存新的App版本
     * @param versionCode 版本号
     * @param versionName 版本名称
     * @param description 版本描述
     * @param file APK文件
     * @return 保存的App版本信息
     * @throws IOException 文件操作异常
     */
    public AppVersion saveAppVersion(Integer versionCode, String versionName, String description, MultipartFile file) throws IOException {
        // 获取当前最新的App版本（如果存在）
        AppVersion latestVersion = getLatestAppVersion();
        
        // 上传APK文件
        String filePath = fileUploadUtil.uploadAppFile(file);
        
        // 如果存在旧版本，则删除旧版本的文件和数据库记录
        if (latestVersion != null) {
            // 删除旧版本文件
            fileUploadUtil.deleteFile(latestVersion.getFilePath());
            
            // 删除旧版本数据库记录
            webAppVersionRepository.deleteById(latestVersion.getId());
        }
        
        // 创建AppVersion对象
        AppVersion appVersion = new AppVersion();
        appVersion.setVersionCode(versionCode);
        appVersion.setVersionName(versionName);
        appVersion.setDescription(description);
        appVersion.setFilePath(filePath);
        appVersion.setFileSize(file.getSize());
        appVersion.setCreateDate(new Date());
        appVersion.setUpdateDate(new Date());
        
        // 保存到数据库
        return webAppVersionRepository.save(appVersion);
    }
    
    /**
     * 获取最新的App版本
     * @return 最新的App版本信息
     */
    public AppVersion getLatestAppVersion() {
        List<AppVersion> versions = webAppVersionRepository.findAllByOrderByVersionCodeDesc();
        return versions.isEmpty() ? null : versions.get(0);
    }
    
    /**
     * 删除指定的App版本
     * @param id App版本ID
     */
    public void deleteAppVersion(Integer id) {
        webAppVersionRepository.deleteById(id);
    }
}